package com.rds.material.service;

import com.alibaba.fastjson.JSONObject;
import com.rds.common.api.eco.domain.RdaEco;
import com.rds.common.api.material.domain.MaterialBill;
import com.rds.common.api.material.domain.RdaPartsRel;
import com.rds.common.core.domain.entity.Document;

import com.rds.material.dto.*;
import com.rds.system.domain.Sharing;
import org.springframework.web.bind.annotation.RequestBody;

import javax.servlet.ServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 【请填写功能名称】Service接口
 * 
 * @author ruoyi
 * @date 2023-11-30
 */
public interface IRdaPartsRelService 
{
    /**
     * 查询【请填写功能名称】
     * 
     * @param id 【请填写功能名称】主键
     * @return 【请填写功能名称】
     */
    public RdaPartsRel selectRdaPartsRelById(Long id);


    public List<RdaPartsRel> getRelAndBill(Long id);

    public RdaPartsRel selectBillByRelId(Long id);

    public int addFile(Sharing rdaMemberlistUser);

    public void copywbs(@RequestBody List<Sharing> sharing);

    public void removeEbom(Long[] ids);

    public void delectEbom(Long[] ids);

    public void InsertExistAsChild(Sharing rdaPmsassignRel);

    public void InsertExistAsLevel(Sharing rdaPmsassignRel);

    public void InsertExistAsUpper(Sharing rdaPmsassignRel);

    public void bindDoc(Sharing rdaPmsassignRel);

    JSONObject RelAndBillList(ServletRequest request);

    int addMaterialAddRel(Map<String, Object> map, String type);

    int updateMaterialAddRel(Map<String, Object> map);

    /**
     * 遍历层级
     * @param rdaPartsRel
     * @return
     */
    List <RdaPartsRel> billofMaterial(RdaPartsRel rdaPartsRel);

    List <MaterialBill> materialVersion(Long id);

    public void Upgrade(MaterialVersionUpgradeDto materialVersionUpgradeDto);

    public List<MaterialBillAndRdaPartsRel> compareReport(Long id, String type, String name, String revision);

    public List<MaterialBill> selectMaterialBillList(MaterialBill materialBill);

    /**
     * 比如level是2，获取0，1，2的层级
     * @param rdaPartsRel
     * @return
     */
    List <RdaPartsRel> billofMaterialEbomLevel(RdaPartsRel rdaPartsRel);

    List <MaterialBillAndRdaPartsRel> referrer(Long id);

    public void rankSort(RdaPartsRel rdaPartsRel);

    public void viewSort(Sharing rdaPmsassignRel);

    public void copyTo(Sharing rdaRestrainwbsRel);

    public List <MaterialBillAndRdaPartsRel> reverseList(Long id);


    /**
     * 查询【请填写功能名称】列表
     * 
     * @param rdaPartsRel 【请填写功能名称】
     * @return 【请填写功能名称】集合
     */
    public List<RdaPartsRel> selectRdaPartsRelList(RdaPartsRel rdaPartsRel);

    public List<RdaEco> changeControl(Long id);

    public void referenceEco(Sharing rdaPmsassignRel);

    public void addEcoByMaterial(RdaEcoDto rdaEcoDto);

    /**
     * 替换为现有零件
     * @param replaceMaterialBillDTO
     */
    public void replaceEbom(ReplaceMaterialBillDTO replaceMaterialBillDTO);


    public void replacewithNewMaterialBill(MaterialBillReplaceNewDTO materialBillReplaceNewDTO);


//    public List<Document> selectRdaPartsRelList(Long id) throws Exception;
    public List<HashMap<String, Object>> selectRdaPartsRelList(Long id) throws Exception;

    /**
     * 新增【请填写功能名称】
     * 
     * @param rdaPartsRel 【请填写功能名称】
     * @return 结果
     */
    public int insertRdaPartsRel(RdaPartsRel rdaPartsRel);

    /**
     * 修改【请填写功能名称】
     * 
     * @param rdaPartsRel 【请填写功能名称】
     * @return 结果
     */
    public int updateRdaPartsRel(RdaPartsRel rdaPartsRel);

    /**
     * 批量删除【请填写功能名称】
     * 
     * @param ids 需要删除的【请填写功能名称】主键集合
     * @return 结果
     */
    public int deleteRdaPartsRelByIds(Long[] ids);

    /**
     * 删除【请填写功能名称】信息
     * 
     * @param id 【请填写功能名称】主键
     * @return 结果
     */
    public int deleteRdaPartsRelById(Long id);



}
